package cn.com.greatwall.user.service;

import java.util.List;
import java.util.Set;

import cn.com.greatwall.common.model.Result;
import cn.com.greatwall.common.model.SysMenu;
import cn.com.greatwall.common.service.ISuperService;

/**
 * @Author herw
 * @Time 2022-02-19 14:55:30
 * @Version 1.0
 * @Description: TODO(用一句话描述该文件做什么)
 */
public interface ISysMenuService extends ISuperService<SysMenu> {
    /**
     * 查询所有菜单
     */
    List<SysMenu> findAll();
    
    /**
     * 查询所有一级菜单
     */
    List<SysMenu> findOnes();
    
    /**
     * 查询子菜单
     */
    List<SysMenu> findByPid(String pid);
    
    /**
     * 角色分配菜单
     * @param roleId
     * @param menuIds
     */
    void setMenuToRole(Long roleId, Set<Long> menuIds);
    
    /**
     * 角色菜单列表
     * @param roleIds 角色ids
     * @return
     */
    List<SysMenu> findByRoles(Set<Long> roleIds);
    
    /**
     * 角色菜单列表
     * @param roleIds 角色ids
     * @param roleIds 是否菜单
     * @return
     */
    List<SysMenu> findByRoles(Set<Long> roleIds, Integer type);
    
    /**
     * 角色菜单列表
     * @param roleCodes
     * @return
     */
    List<SysMenu> findByRoleCodes(Set<String> roleCodes, Integer type);
    
    /**
     * 获取待删除的菜单
     * 
     * @param menuList /
     * @param menuSet  /
     * @return /
     */
    Set<SysMenu> getChildMenus(List<SysMenu> menuList, Set<SysMenu> menuSet);
    
    /**
     * 根据ID获取同级与上级数据
     * 
     * @param menuDto /
     * @param objects /
     * @return /
     */
    List<SysMenu> getSuperior(SysMenu menu, List<SysMenu> objects);
    
    /**
     * 懒加载菜单数据
     * 
     * @param pid /
     * @return /
     */
    List<SysMenu> getMenus(Long pid);
    
    /**
     * 新增/修改菜单
     * @param sysMenu
     * @return
     * @throws Exception
     */
    Result saveOrUpdateMenu(SysMenu sysMenu) throws Exception;
    
    /**
     * 删除菜单
     * @param id
     * @return
     * @throws Exception
     */
    Result delete(Long id) throws Exception;
}
